#Boa:Dialog:ABMChequeras

import wx
import consultasBD
import utiles

def create(parent):
    return ABMChequeras(parent)

[wxID_ABMCHEQUERAS, wxID_ABMCHEQUERASBUTTON1, wxID_ABMCHEQUERASBUTTON2, 
 wxID_ABMCHEQUERASSTATICTEXT1, wxID_ABMCHEQUERASSTATICTEXT2, 
 wxID_ABMCHEQUERASSTATICTEXT3, wxID_ABMCHEQUERASSTATICTEXT4, 
 wxID_ABMCHEQUERASSTATICTEXT5, wxID_ABMCHEQUERASSTATICTEXT6, 
 wxID_ABMCHEQUERASTEXTCTRL1, wxID_ABMCHEQUERASTEXTCTRL2, 
 wxID_ABMCHEQUERASTEXTCTRL3, wxID_ABMCHEQUERASTEXTCTRL4, 
 wxID_ABMCHEQUERASTEXTCTRL5, wxID_ABMCHEQUERASTEXTCTRL6, 
] = [wx.NewId() for _init_ctrls in range(15)]

class ABMChequeras(wx.Dialog):
    def _init_ctrls(self, prnt):
        # generated method, don't edit
        wx.Dialog.__init__(self, id=wxID_ABMCHEQUERAS, name='ABMChequeras',
              parent=prnt, pos=wx.Point(388, 151), size=wx.Size(390, 227),
              style=wx.DEFAULT_DIALOG_STYLE, title='ABM Chequeras')
        self.SetClientSize(wx.Size(382, 200))

        self.staticText1 = wx.StaticText(id=wxID_ABMCHEQUERASSTATICTEXT1,
              label='Nro.Banco', name='staticText1', parent=self,
              pos=wx.Point(16, 16), size=wx.Size(50, 13), style=0)

        self.textCtrl1 = wx.TextCtrl(id=wxID_ABMCHEQUERASTEXTCTRL1,
              name='textCtrl1', parent=self, pos=wx.Point(16, 32),
              size=wx.Size(48, 21), style=0, value='')
        self.textCtrl1.Bind(wx.EVT_KILL_FOCUS, self.OnCodBanco)

        self.staticText2 = wx.StaticText(id=wxID_ABMCHEQUERASSTATICTEXT2,
              label='Nombre', name='staticText2', parent=self, pos=wx.Point(72,
              16), size=wx.Size(37, 13), style=0)

        self.textCtrl2 = wx.TextCtrl(id=wxID_ABMCHEQUERASTEXTCTRL2,
              name='textCtrl2', parent=self, pos=wx.Point(72, 32),
              size=wx.Size(296, 21), style=0, value='')
        self.textCtrl2.SetEditable(True)
        self.textCtrl2.Bind(wx.EVT_KILL_FOCUS, self.OnNombreBanco)

        self.staticText3 = wx.StaticText(id=wxID_ABMCHEQUERASSTATICTEXT3,
              label='Cheque inicial', name='staticText3', parent=self,
              pos=wx.Point(160, 64), size=wx.Size(65, 13), style=0)

        self.textCtrl3 = wx.TextCtrl(id=wxID_ABMCHEQUERASTEXTCTRL3,
              name='textCtrl3', parent=self, pos=wx.Point(160, 80),
              size=wx.Size(100, 21), style=0, value='')

        self.staticText4 = wx.StaticText(id=wxID_ABMCHEQUERASSTATICTEXT4,
              label='Cheque final', name='staticText4', parent=self,
              pos=wx.Point(264, 64), size=wx.Size(60, 13), style=0)

        self.textCtrl4 = wx.TextCtrl(id=wxID_ABMCHEQUERASTEXTCTRL4,
              name='textCtrl4', parent=self, pos=wx.Point(264, 80),
              size=wx.Size(100, 21), style=0, value='')

        self.staticText5 = wx.StaticText(id=wxID_ABMCHEQUERASSTATICTEXT5,
              label='Fecha', name='staticText5', parent=self, pos=wx.Point(72,
              64), size=wx.Size(29, 13), style=0)

        self.textCtrl5 = wx.TextCtrl(id=wxID_ABMCHEQUERASTEXTCTRL5,
              name='textCtrl5', parent=self, pos=wx.Point(72, 80),
              size=wx.Size(72, 21), style=0, value='')
        self.textCtrl5.SetEditable(False)

        self.staticText6 = wx.StaticText(id=wxID_ABMCHEQUERASSTATICTEXT6,
              label='Observaciones', name='staticText6', parent=self,
              pos=wx.Point(72, 104), size=wx.Size(71, 13), style=0)

        self.textCtrl6 = wx.TextCtrl(id=wxID_ABMCHEQUERASTEXTCTRL6,
              name='textCtrl6', parent=self, pos=wx.Point(72, 120),
              size=wx.Size(296, 21), style=0, value='')

        self.button1 = wx.Button(id=wxID_ABMCHEQUERASBUTTON1, label='Guardar',
              name='button1', parent=self, pos=wx.Point(16, 168),
              size=wx.Size(75, 23), style=0)
        self.button1.Bind(wx.EVT_BUTTON, self.OnGuardar,
              id=wxID_ABMCHEQUERASBUTTON1)

        self.button2 = wx.Button(id=wxID_ABMCHEQUERASBUTTON2, label='Salir',
              name='button2', parent=self, pos=wx.Point(288, 168),
              size=wx.Size(75, 23), style=0)
        self.button2.Bind(wx.EVT_BUTTON, self.OnSalir,
              id=wxID_ABMCHEQUERASBUTTON2)

    def __init__(self, parent):
        self._init_ctrls(parent)
        self.textCtrl5.SetLabel(utiles.obtenerFecha("d-m-Y"))

    def OnCodBanco(self, event):
        if self.textCtrl1.GetLabel()=="":
            return
        codbanco = self.textCtrl1.GetLabel()
        sql = "SELECT nombre FROM chq_bancos WHERE codbanco='"+codbanco+"' "
        resultado = consultasBD.ordenCrudaDict(sql)
        if len(resultado)==0 or resultado==() or resultado==None:
            utiles.mensaje(None,"Codigo de banco no encontrado")
            self.textCtrl1.SetFocus()
            return
        banco = resultado[0]
        self.textCtrl1.SetEditable(False)
        self.textCtrl2.SetLabel(banco["nombre"])
        self.textCtrl3.SetFocus()

    def OnNombreBanco(self, event):
        if self.textCtrl2.GetLabel()=="":
            return
        nombre = self.textCtrl2.GetLabel()
        sql = "SELECT codbanco,nombre FROM chq_bancos WHERE nombre LIKE '%"+nombre+"%' "
        resultados = consultasBD.ordenCrudaDict(sql)
        if len(resultados)==1:
            dat = resultados[0]
            codbanco = str(dat["codbanco"])
            nombre = str(dat["nombre"])
            self.textCtrl1.SetLabel(codbanco)            
            self.textCtrl2.SetLabel(nombre)
            self.textCtrl1.SetEditable(False)
            self.textCtrl2.SetEditable(False)
            self.textCtrl3.SetFocus()
            return
        if len(resultados)==0:
            self.textCtrl2.SetLabel("")
            self.textCtrl2.SetFocus()
            return
        import BuscarBancos
        ventana = BuscarBancos.Dialog1(self,self.textCtrl2.GetLabel())
        try:
            ventana.ShowModal()
            eleccion = ventana.getSeleccion()
        finally:
            ventana.Destroy()
        if eleccion.split(" / ") != ['']:
            self.textCtrl1.SetValue(eleccion.split(" / ")[1])
            self.textCtrl2.SetValue(eleccion.split(" / ")[0])
        self.textCtrl3.SetFocus()

    def OnSalir(self, event):
        self.Close()

    def verificaChequeras(self):
        try:
            inicial = int(self.textCtrl3.GetLabel())
        except:
            utiles.mensaje(None,"Cheque Inicio debe ser un valor numerico")
            self.textCtrl3.SetFocus()
            return False
        try:
            final = int(self.textCtrl4.GetLabel())
        except:
            utiles.mensaje(None,"Cheque Final debe ser un valor numerico")
            self.textCtrl4.SetFocus()
            return False
        if final<inicial:
            utiles.mensaje(None,"El valor INICIAL debe ser inferior al FINAL")
            self.textCtrl3.SetFocus()
            return False
        codbanco = self.textCtrl1.GetLabel()
        sql = "SELECT * FROM chq_chequeras WHERE codbanco='"+codbanco+"' "
        resultado = consultasBD.ordenCrudaDict(sql)
        if len(resultado)==0 or resultado==() or resultado==None:
            return True
        limiteInferior = int(self.textCtrl3.GetLabel())
        limiteSuperior = int(self.textCtrl4.GetLabel())
        for item in resultado:
            chequeinicial = item["chequeinicial"]
            chequefinal = item["chequefinal"]
            rangocheques = range(chequeinicial,chequefinal+1)
            if limiteInferior in rangocheques:
                utiles.mensaje(None,"El numero INICIAL ya fue utilizado en chequera\n"+item["observaciones"])
                self.textCtrl3.SetFocus()
                return False
            if limiteSuperior in rangocheques:
                utiles.mensaje(None,"El numero FINAL ya fue utilizado en chequera\n"+item["observaciones"])
                self.textCtrl3.SetFocus()
                return False
        return True

    def OnGuardar(self, event):
        if not self.verificaChequeras():
            return
        if self.textCtrl1.GetLabel()=="":
            utiles.mensaje(None,"Indique el banco")
            self.textCtrl1.SetFocus()
            return
        if self.textCtrl3.GetLabel()=="" or \
           self.textCtrl4.GetLabel()=="":
            utiles.mensaje(None,"Faltan datos de Chequeras")
            self.textCtrl3.SetFocus()
            return
        if self.textCtrl6.GetLabel()=="":
            utiles.mensaje(None,"Debe ingresar una descripcion\n(Por ejemplo: numero de chequera)")
            self.textCtrl6.SetFocus()
            return
        codbanco = self.textCtrl1.GetLabel()
        chequeinicial = self.textCtrl3.GetLabel()
        chequefinal = self.textCtrl4.GetLabel()
        observaciones = self.textCtrl6.GetLabel()
        fecha = utiles.obtenerFecha("Y-m-d")

        r1 = "chq_chequeras(codbanco,chequeinicial,chequefinal,fecha,observaciones)"
        r2 = "('"+codbanco+"','"+chequeinicial+"','"+chequefinal+"','"+fecha+"','"+observaciones+"')"
        consultaSQL = r1 + r2
        try:
            consultasBD.executaInsertSQL(self,r1,r2)
        except:
            utiles.mensaje(None,"Error al grabar el nuevo registro.\nVerifique que no haya repetido chq. inicial")
            self.textCtrl3.SetFocus()
            return
        utiles.mensaje(None,"Chequera grabada")
        self.OnSalir(None)

